/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Classes;

import java.util.Date;
import java.util.Objects;

/**
 *  Représente un salarie
 * @author userinsta
 */
public class Salarie extends Personne {
    private int _salaireMensuel;
    private Date _debutContrat;
    private Date _finContrat;
    private double _horaireJournalier;
    /**
     * Constructors
     */
    public Salarie(){}
    
    public Salarie(String nom, String prenom, int dateDeNaissance, String numeroTelephone, Adresse adresse, int salaireMensuel,Date debutContrat, Date finContrat, double horaireJournalier ) throws Exception{
        super(nom, prenom, dateDeNaissance, numeroTelephone, adresse);
        this.setSalaireMensuel(salaireMensuel);
        this.setDebutContrat(debutContrat);
        this.setFinContrat(finContrat);
        this.setHoraireJournalier(horaireJournalier);
    }
    /**
     * Getters and Setters
     */
    public int getSalaireMensuel() {
        return _salaireMensuel;
    }

    public Date getDebutContrat() {
        return _debutContrat;
    }

    public Date getFinContrat() {
        return _finContrat;
    }

    public double getHoraireJournalier() {
        return _horaireJournalier;
    }    
    
    public void setSalaireMensuel(int salaireMensuel) {
        this._salaireMensuel = salaireMensuel;
    }

    public void setDebutContrat(Date debutContrat) throws Exception {
        if (this.getFinContrat() !=null)
        {
            if(this.getFinContrat().before(debutContrat))
                throw new Exception("La fin du contrat est avant le début");
        }
        this._debutContrat = debutContrat;
    }

    public void setFinContrat(Date finContrat) throws Exception {
        if (this.getDebutContrat() !=null)
        {
            if(this.getDebutContrat().after(finContrat))
                throw new Exception("La fin du contrat est avant le début");
        }
        this._finContrat = finContrat;
    }

    public void setHoraireJournalier(double horaireJournalier) {
        this._horaireJournalier = horaireJournalier;
    }    
    /**
     * Equals
     * @param obj
     * @return true si equals
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Salarie other = (Salarie) obj;
        if(!super.equals(other))
            return false;
        if (this._salaireMensuel != other._salaireMensuel) {
            return false;
        }
        if (!Objects.equals(this._debutContrat, other._debutContrat)) {
            return false;
        }
        if (!Objects.equals(this._finContrat, other._finContrat)) {
            return false;
        }
        if (Double.doubleToLongBits(this._horaireJournalier) != Double.doubleToLongBits(other._horaireJournalier)) {
            return false;
        }
        return true;
    }
}
